/**
 * 
 */
package cl.hhha.web.model;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;


/**
 * Modela el cambio de estados de un formulario hechos por los usuarios.
 * 
 * @author Óscar Álvarez V
 * @email oialvarez@gmail.com
 * @Version 1.0
 * @date 25-06-2009 23:52:56
 */
@Entity
@Table(name="wsap_movimiento_formulario")
public class MovimientoFormulario extends BaseObject implements
		Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 6327672645412916892L;

	@Id @GeneratedValue(strategy=GenerationType.AUTO)
	private Long id;
	
	@ManyToOne(optional=false)
	private Formulario formulario;
	
	@ManyToOne(optional=false)
	private User usuarioModificador;
	
	@ManyToOne(optional=false)
	private EstadoFormulario estadoAnterior;
	
	@ManyToOne(optional=false)
	private EstadoFormulario estadoActual;
	
	private Date fechaModificacion;

	private String motivo;
	
	
	/**
	 * @return the id
	 */
	public Long getId() {
		return id;
	}

	/**
	 * @param id the id to set
	 */
	public void setId(Long id) {
		this.id = id;
	}

	/**
	 * @return the formulario
	 */
	public Formulario getFormulario() {
		return formulario;
	}

	/**
	 * @param formulario the formulario to set
	 */
	public void setFormulario(Formulario formulario) {
		this.formulario = formulario;
	}

	/**
	 * @return the usuarioModificador
	 */
	public User getUsuarioModificador() {
		return usuarioModificador;
	}

	/**
	 * @param usuarioModificador the usuarioModificador to set
	 */
	public void setUsuarioModificador(User usuarioModificador) {
		this.usuarioModificador = usuarioModificador;
	}

	/**
	 * @return the estadoAnterior
	 */
	public EstadoFormulario getEstadoAnterior() {
		return estadoAnterior;
	}

	/**
	 * @param estadoAnterior the estadoAnterior to set
	 */
	public void setEstadoAnterior(EstadoFormulario estadoAnterior) {
		this.estadoAnterior = estadoAnterior;
	}

	/**
	 * @return the estadoActual
	 */
	public EstadoFormulario getEstadoActual() {
		return estadoActual;
	}

	/**
	 * @param estadoActual the estadoActual to set
	 */
	public void setEstadoActual(EstadoFormulario estadoActual) {
		this.estadoActual = estadoActual;
	}

	/**
	 * @return the fechaModificacion
	 */
	public Date getFechaModificacion() {
		return fechaModificacion;
	}

	/**
	 * @param fechaModificacion the fechaModificacion to set
	 */
	public void setFechaModificacion(Date fechaModificacion) {
		this.fechaModificacion = fechaModificacion;
	}

	/**
	 * @return the motivo
	 */
	public String getMotivo() {
		return motivo;
	}

	/**
	 * @param motivo the motivo to set
	 */
	public void setMotivo(String motivo) {
		this.motivo = motivo;
	}

	/* (non-Javadoc)
	 * @see cl.hhha.web.model.BaseObject#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object o) {
		if(o == this){
			return true;
		}
		
		if (!(o instanceof MovimientoFormulario)){
			return false;
		}
		
		MovimientoFormulario mf = (MovimientoFormulario)o;
		
		return compareObjects(formulario, mf.getFormulario())
			&& compareObjects(usuarioModificador, mf.getUsuarioModificador())
			&& compareObjects(estadoAnterior, mf.getEstadoAnterior())
			&& compareObjects(estadoActual, mf.getEstadoActual());
	}

	/* (non-Javadoc)
	 * @see cl.hhha.web.model.BaseObject#hashCode()
	 */
	@Override
	public int hashCode() {
		return hashObject(formulario) + hashObject(usuarioModificador)
			+ hashObject(estadoAnterior) + hashObject(estadoActual);
	}

	/* (non-Javadoc)
	 * @see cl.hhha.web.model.BaseObject#toString()
	 */
	@Override
	public String toString() {
		return usuarioModificador + " modifica " + formulario + " a estado " + estadoActual;
	}

}
